<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
    <meta name="keywords" content="hexo, autumn" />
    <title>
        iOS开发
    </title>
    <!-- favicon -->
    
    <link rel="icon" href="https://cdn.jsdelivr.net/gh/frontendsophie/hexo-theme-autumn@1.0.0/source/img/favicon.ico" />
     <link rel="stylesheet" href="/blog/css/style.css">

    <!-- highlight -->
    <link rel="stylesheet" href="https://cdn.bootcss.com/highlight.js/9.12.0/styles/github-gist.min.css" />
    <script src="//cdn.bootcss.com/highlight.js/9.2.0/highlight.min.js"></script>
    <script>
        hljs.initHighlightingOnLoad()
    </script>
    <script src="https://cdn.jsdelivr.net/gh/frontendsophie/hexo-infinite-scroll@2.0.0/dist/main.js"></script>

    <script>
        infiniteScroll()

        window.addEventListener('DOMContentLoaded', function () {
            const [
                mainTitle,
                mobileMenu,
                mobileMainTitle,
                mobileMenuBtn,
                ipadMenuBtn,
                aside,
                closeBtn,
            ] = getEle(
                '#main-title',
                '.mobile-menu',
                '.mobile-menu h3',
                '.mobile-menu button',
                '.ipad-menu',
                'aside',
                'aside .close',
            )
            const io = new IntersectionObserver(entries => {
                if (entries[0].intersectionRatio <= 0) {
                    mobileMainTitle.classList.remove('invisibile')
                } else {
                    mobileMainTitle.classList.add('invisibile')
                }
            })
            io.observe(mainTitle)

            clickToggleAside(mobileMenuBtn)
            clickToggleAside(ipadMenuBtn)
            clickToggleAside(closeBtn, false)

            const isMenuVisible = window.getComputedStyle(mobileMenu).display !== 'none'
            if (isMenuVisible) document.body.style.background = 'none'

            function getEle(...args) {
                return args.map(arg => document.querySelector(arg))
            }

            function clickToggleAside(btn, show = true) {
                btn.addEventListener('click', function () {
                    if (show) {
                        aside.style.display = 'block'
                    } else {
                        aside.style.display = 'none'
                    }
                })
            }
        })
    </script>
</head>

<body style="background: url(https://cdn.jsdelivr.net/gh/frontendsophie/hexo-theme-autumn@1.0.0/source/img/button-bg.png) #f3f3f3">
    <div class="container">
        <header class="header">
    <nav class="mobile-menu" style="background: url(https://cdn.jsdelivr.net/gh/frontendsophie/hexo-theme-autumn@1.0.0/source/img/button-bg.png) #f3f3f3">
        <h3 class="invisibile">
            <a href="/blog/" class="logo">
                iOS开发
            </a>
        </h3>
        <button class="menu">menu</button>
    </nav>

    <button class="ipad-menu menu">menu</button>

    <h1 class="title" id="main-title">
        <a href="/blog/" class="logo">
            iOS开发
        </a>
    </h1>
    <h2 class="desc">
        
    </h2>

    <div class="links">
        <ul>
            
            <li>
                <a href="https://github.com/FrontendSophie" target="_blank" rel="noopener">
                    Github
                </a>
            </li>
            
            <li>
                <a href="https://www.linkedin.com/in/frontendsophie/" target="_blank" rel="noopener">
                    LinkedIn
                </a>
            </li>
            
        </ul>
    </div>
</header>
        <main class="main">
            <article class="post">
    
    
    
    <h2 class="post-title">
        iOS编码规范
    </h2>
    <ul class="post-date">
        <li>
            2020-02-28
        </li>
        <li>
            selinaSun
        </li>
    </ul>
    <div class="post-content">
        <h2 id="命名"><a href="#命名" class="headerlink" title="命名"></a>命名</h2><h3 id="Bundle-id命名："><a href="#Bundle-id命名：" class="headerlink" title="Bundle id命名："></a>Bundle id命名：</h3><p><code>规则：采用反域名命名规则，全部使用小写字母。一级包名为com，二级包名根据应用进行命名。</code></p>
<h3 id="类命名："><a href="#类命名：" class="headerlink" title="类命名："></a>类命名：</h3><p><code>类命采取驼峰命名规则，即首字母必须大写，如果为词组，则每个单词的首字母必须大写，类名只能使用名词或名词词组；并以项目工程开头命名，力求类名简单 。</code></p>
<p><code>继承自UIView的类以View结尾。</code></p>
<p><code>继承自ViewController的类以ViewController 结尾。</code></p>
<p><code>保存数据的实体以Model结尾。</code></p>
<h3 id="方法的命名："><a href="#方法的命名：" class="headerlink" title="方法的命名："></a>方法的命名：</h3><p><code>规则：方法名第一个单词是一个动词，其首字母小写，其后的所有单词首字母大写。</code><br><code>如：- (void) addNotification{}</code></p>
<h3 id="类中常用方法命名："><a href="#类中常用方法命名：" class="headerlink" title="类中常用方法命名："></a>类中常用方法命名：</h3><h3 id="类的获取方法"><a href="#类的获取方法" class="headerlink" title="类的获取方法"></a>类的获取方法</h3><p><code>如果返回值为单个值，一般在头部加上单词“get”。如果返回值是数组或列表，要在头部加单词“find”</code><br><code>如：- (NSString*)getUserName{}、- (NSArray*)findFriends{}</code></p>
<h3 id="类的设置方法"><a href="#类的设置方法" class="headerlink" title="类的设置方法"></a>类的设置方法</h3><p><code>在被访问字段名的前面加上前缀 set</code><br><code>如：- (void)setName:(NSString *)name{}</code></p>
<h3 id="类的布尔型判断方法"><a href="#类的布尔型判断方法" class="headerlink" title="类的布尔型判断方法"></a>类的布尔型判断方法</h3><p><code>一般要求方法名使用单词 is或has 做前缀</code><br><code>如：isNetWorkConnected（）</code></p>
<h3 id="构造方法应该用递增的方式写。"><a href="#构造方法应该用递增的方式写。" class="headerlink" title="构造方法应该用递增的方式写。"></a>构造方法应该用递增的方式写。</h3><h4 id="参数个数少的在前"><a href="#参数个数少的在前" class="headerlink" title="参数个数少的在前"></a>参数个数少的在前</h4><h3 id="变量命名"><a href="#变量命名" class="headerlink" title="变量命名"></a>变量命名</h3><p><code>规则：第一个单词首字母必须小写，往后的单词需要符合驼峰命名规则，即第一个字母大写。变量名尽可能的使用名词或名词词组。同样要求简单易懂，不允许出现无意义的单词。</code><br><code>如：String *userName</code></p>
<h3 id="其他命名规则"><a href="#其他命名规则" class="headerlink" title="其他命名规则"></a>其他命名规则</h3><p><code>***实例变量命名***</code><br><code>加前缀“_”</code></p>
<p><code>***控件变量命名***</code><br><code>规则：一般的变量命名后加上控件名称</code><br><code>IBOutlet UILabel *userNameLabel;</code></p>
<p><code>***常量命名***</code><br><code>规则：必须全部大写，单词间用下划线隔开。</code><br><code>如：MAP_KEY</code></p>
<p><code>***异常命名***</code><br><code>规则：自定义异常首字母大写，以 Exception 为结尾。</code><br><code>如：AppException</code></p>
<p><code>***资源命名***</code><br><code>项目中所使用的所有资源命名必须以全部单词小写，单词间以下划线分割，加前缀区分。</code><br><code>原则：</code><br><code>1）采用单词全拼，或者大家公认无岐义的缩写(比如：nav，bg，btn等)</code><br><code>2）采用“模块+功能”命名法，模块分为公共模块、私有模块。公共模块主要包括统一的背景，导航条，标签，公共的按钮背景，公共的默认图等等；私有模块主要根据app的业务</code><br><code>功能模块划分，比如用户中心，消息中心等</code><br><code>btn_xx_normal          按钮正常情况下的效果</code><br><code>btn_xx_press             按钮点击下的效果</code><br><code>bg_head                    背景图片使用bg_功能_说明</code><br><code>def_search_cell          默认图片使用def_功能_说明</code><br><code>icon_more_help         图标图片使用icon_功能_说明</code><br><code>seg_list_line              具有分割特征的图片使用seg_功能_说明</code><br><code>sel_ok                        选择图标使用sel_功能_说明</code></p>
<h2 id="代码风格"><a href="#代码风格" class="headerlink" title="代码风格"></a>代码风格</h2><h4 id="整体代码风格需要统一"><a href="#整体代码风格需要统一" class="headerlink" title="整体代码风格需要统一"></a>整体代码风格需要统一</h4><h3 id="Import"><a href="#Import" class="headerlink" title="Import"></a>Import</h3><h4 id="Import语句引入的次序如下："><a href="#Import语句引入的次序如下：" class="headerlink" title="Import语句引入的次序如下："></a>Import语句引入的次序如下：</h4><p><code>IOS imports</code><br><code>第三方库</code><br><code>自定义.h文件</code><br><code>在每组内部按字母排序，大写字母排在小写字母的前面。每个大组之间应该空一行。</code></p>
<h3 id="空格"><a href="#空格" class="headerlink" title="空格"></a>空格</h3><p><code>1. 关键字与其后的表达式之间需要加空格。</code></p>
<p><code>2. 单目操作符不应与操作数分开。</code></p>
<p><code>3. 除’,’外，其它双目操作符应与它们的操作数用空格隔开。</code></p>
<p><code>4. 在.h中协议&lt;&gt;前面有一个空格。</code></p>
<p><code>5. 在.h中成员声明时，类型与变量之间有至少1个空格。*号靠近变量，不靠近类型。</code></p>
<p><code>6. @property后留1个空格，（）里面，逗号紧跟前一变量，与后一变量之间留1 个空格。（）外面，先留1个空格，再声明属性。</code></p>
<p><code>7. 方法的+，-后面与（）。</code></p>
<p><code>8. 返回类型与*之间留1个空格，方法参数中返回类型与*之间留1个空格</code></p>
<p><code>9. 在多参数方法中，每个参数后面都有1个空格。</code></p>
<p><code>10. Switch..case 语句，代码块需要留4个空格。</code></p>
<p><code>11. If语句嵌套，内部if语句需要留4个空格。</code></p>
<h3 id="h文件空行"><a href="#h文件空行" class="headerlink" title=".h文件空行"></a>.h文件空行</h3><h3 id="以下情况要空行："><a href="#以下情况要空行：" class="headerlink" title="以下情况要空行："></a>以下情况要空行：</h3><p><code>1. 头文件包含(#import)与@class之间</code></p>
<p><code>2. @interface与@class之间</code></p>
<p><code>3. 头文件{}内，空1行开始写成员对象。</code></p>
<p><code>4. 头文件{}外，空1行开始写属性。</code></p>
<p><code>5. 属性与方法之间。</code></p>
<p><code>6. 如果需要声明protocol，空2行接着写。通常protocol写在@end后面，但是声明在@interface之前。</code></p>
<p><code>7. 方法与方法之间空1行。</code></p>
<p><code>8. 方法与@end之间。</code></p>
<h3 id="m文件空行"><a href="#m文件空行" class="headerlink" title=".m文件空行"></a>.m文件空行</h3><p><code>1. 文件说明与头文件包含(#import)之间。</code></p>
<p><code>2. 头文件包含(#import)之间。</code></p>
<p><code>3. @implementation和@synthesize之间。</code></p>
<p><code>4. @synthesize与方法之间。</code></p>
<p><code>5. 变量声明后需要空1行。</code></p>
<p><code>6. 各功能块之间。</code></p>
<p><code>7. #pragma mark 与方法之间。</code></p>
<h3 id="Log"><a href="#Log" class="headerlink" title="Log"></a>Log</h3><h4 id="规则：统一使用自定的log服务，不直接使用系统自带。"><a href="#规则：统一使用自定的log服务，不直接使用系统自带。" class="headerlink" title="规则：统一使用自定的log服务，不直接使用系统自带。"></a>规则：统一使用自定的log服务，不直接使用系统自带。</h4><h3 id="语句"><a href="#语句" class="headerlink" title="语句"></a>语句</h3><p><code>每行只能有一个语句</code></p>
<p><code>每行代码最多不得操作100个字符。</code></p>
<h3 id="控制语句"><a href="#控制语句" class="headerlink" title="控制语句"></a>控制语句</h3><p><code>If语句</code><br><code>判断中如果有常量，则应将常量放在判断式的右侧，如if (a &gt; b)</code><br><code>如：if (index &gt; 0) …… //单条语句,放在if同一行</code></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">if (index &gt; 0)&#123; //多行语句</span><br><span class="line"></span><br><span class="line">……….</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p><code>While语句</code></p>
<p><code>循环语句中不允许出现表达式。</code></p>
<p><code>如while（I &lt; documents.getCount()）</code></p>
<p><code>尽可能保证.h文件的简介性，可以不公开的API就不要公开，写在实现文件中即可</code></p>
<h2 id="注释"><a href="#注释" class="headerlink" title="注释"></a>注释</h2><h3 id="头文件注释："><a href="#头文件注释：" class="headerlink" title="头文件注释："></a>头文件注释：</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">/*!</span><br><span class="line"></span><br><span class="line">@header 头文件名称</span><br><span class="line"></span><br><span class="line">@abstract 关于这个源代码文件的一些基本描述</span><br><span class="line"></span><br><span class="line">@author作者</span><br><span class="line"></span><br><span class="line">@version 1.00 2012/01/20 Creation (此文档的版本信息：版本号+创建时间)</span><br><span class="line"></span><br><span class="line">*/</span><br></pre></td></tr></table></figure>

<h3 id="类注释"><a href="#类注释" class="headerlink" title="类注释"></a>类注释</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">/*!</span><br><span class="line"></span><br><span class="line">@class类名</span><br><span class="line"></span><br><span class="line">@abstract 这里可以写关于这个类的一些描述。</span><br><span class="line"></span><br><span class="line">*/</span><br></pre></td></tr></table></figure>

<h3 id="枚举注释"><a href="#枚举注释" class="headerlink" title="枚举注释"></a>枚举注释</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">/*!</span><br><span class="line"></span><br><span class="line">@enum枚举名称</span><br><span class="line"></span><br><span class="line">@abstract 关于这个enum的一些基本信息</span><br><span class="line"></span><br><span class="line">@constant 各个对应值得含义，如： OKButton 对应的是OK按钮的Tag</span><br><span class="line"></span><br><span class="line">*/</span><br><span class="line"></span><br><span class="line">typedef NS_ENUM (NSInteger,RunGoalTypeE)&#123;</span><br><span class="line"></span><br><span class="line">kRunGoalTypeNone= 0,//无目标</span><br><span class="line"></span><br><span class="line">kRunGoalTypeTime= 1,//以时间为目标</span><br><span class="line"></span><br><span class="line">kRunGoalTypeDistance= 2,//以距离为目标</span><br><span class="line"></span><br><span class="line">kRunGoalTypeCalori= 3,//以消耗卡路里为目标</span><br><span class="line"></span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>

<h3 id="协议注释"><a href="#协议注释" class="headerlink" title="协议注释"></a>协议注释</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">/*!</span><br><span class="line"></span><br><span class="line">@protocol 协议名称</span><br><span class="line"></span><br><span class="line">@abstract 这是哪个类的protocol</span><br><span class="line"></span><br><span class="line">@discussion 具体描述信息</span><br><span class="line"></span><br><span class="line">*/</span><br></pre></td></tr></table></figure>

<h3 id="方法注释"><a href="#方法注释" class="headerlink" title="方法注释"></a>方法注释</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">/*!</span><br><span class="line"></span><br><span class="line">@method 方法名</span><br><span class="line"></span><br><span class="line">@abstract该方法的一些简要描述</span><br><span class="line"></span><br><span class="line">@discussion该方法的具体使用方式，需要注意的地方，如果你是设计一个抽象类或者一个共通类给给其他类继承的话，在这里需要具体描述一下怎样使用这个方法。</span><br><span class="line"></span><br><span class="line">@param text参数列表</span><br><span class="line"></span><br><span class="line">@param error 错误参照</span><br><span class="line"></span><br><span class="line">@result 返回结果</span><br><span class="line"></span><br><span class="line">*/</span><br></pre></td></tr></table></figure>

<h3 id="属性注释"><a href="#属性注释" class="headerlink" title="属性注释"></a>属性注释</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">@property 属性名称</span><br><span class="line"></span><br><span class="line">@abstract 该Property的一些基本描述。</span><br><span class="line"></span><br><span class="line">*/</span><br></pre></td></tr></table></figure>

<h3 id="类别注释"><a href="#类别注释" class="headerlink" title="类别注释"></a>类别注释</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">@category 类别名称</span><br><span class="line"></span><br><span class="line">@abstract 哪个类的类别</span><br><span class="line"></span><br><span class="line">*/</span><br></pre></td></tr></table></figure>

<h2 id="文件组织结构"><a href="#文件组织结构" class="headerlink" title="文件组织结构"></a>文件组织结构</h2><h3 id="1-类文件组织"><a href="#1-类文件组织" class="headerlink" title="1. 类文件组织"></a>1. 类文件组织</h3><p><code>建议逻辑结构和物理结构保持一致，以便有效地管理文件</code></p>
<p><code>基于MVC设计模式原则，至少要保证controller与数据处理，网络请求相对独立</code></p>
<p><code>基于功能模块原则，功能模块分包括数据/网络处理，UI前端界面两部分，数据/网络处理应该在数据/网络处理的框架下，而UI前端界面比如用户中心，消息中心，它们的专有的controller，view等应该在属于文件夹。还会遇到一些公共的view，可以开辟出公共的文件夹来管理</code></p>
<p><code>在实际中使用中， 可以结合项目特点灵活使用，但基本的原则一定要保持，保持良好的类文件组织结构，对团队有益无害。</code></p>
<h3 id="2-图片资源文件组织"><a href="#2-图片资源文件组织" class="headerlink" title="2. 图片资源文件组织"></a>2. 图片资源文件组织</h3><p><code>图片资源文件，强烈建议采用Images.xcassets管理，尽量少用自己创建的文件夹管理。</code></p>
<p><code>使用Images.xcassets的优势很多，具体可以查阅读相关文献资料，这里只从工程管理上说一点，在Images.xcassets中添加图片资源，不会对project文件造成改变，而直接在文件夹里添加图片文件，每次都会对project文件造成改变，因此使用Images.xcassets管理图片资源可以减少project冲突的次数。</code></p>
<h3 id="3-类代码组织"><a href="#3-类代码组织" class="headerlink" title="3.  类代码组织"></a>3.  类代码组织</h3><p><code>一个原则：析构函数-</code></p>
<p><code>(void)dealloc最好放到类最上面，第一眼就可以看到这个方法，可以方便看到是否remove了。一些操作，对内存的合理释放等，controller，view的生命周期函数放到最上面，自己实现的方法在下面，相同/相近功能的方法采用#pragma mark -来标记，以便查看。</code></p>
<h2 id="修改规范"><a href="#修改规范" class="headerlink" title="修改规范"></a>修改规范</h2><h3 id="新增代码行"><a href="#新增代码行" class="headerlink" title="新增代码行"></a>新增代码行</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">//修改人，修改时间，修改说明</span><br><span class="line"></span><br><span class="line">新增代码行</span><br><span class="line"></span><br><span class="line">//修改结束</span><br><span class="line"></span><br><span class="line">删除代码行</span><br><span class="line"></span><br><span class="line">删除代码向的前后用注释行说明</span><br><span class="line"></span><br><span class="line">//修改人，修改时间，修改说明</span><br><span class="line"></span><br><span class="line">要删除的代码行(将要删除的语句进行注释)</span><br><span class="line"></span><br><span class="line">//修改结束</span><br></pre></td></tr></table></figure>


<h3 id="修改代码行"><a href="#修改代码行" class="headerlink" title="修改代码行"></a>修改代码行</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">//修改人，修改时间，修改说明</span><br><span class="line"></span><br><span class="line">//修改前代码行开始</span><br><span class="line"></span><br><span class="line">//修改前代码行</span><br><span class="line"></span><br><span class="line">//修改前代码行结束</span><br><span class="line"></span><br><span class="line">//修改后代码行开始</span><br><span class="line"></span><br><span class="line">修改后代码行</span><br><span class="line"></span><br><span class="line">//修改结束</span><br></pre></td></tr></table></figure>

<h3 id="避免出现的情况"><a href="#避免出现的情况" class="headerlink" title="避免出现的情况"></a>避免出现的情况</h3><p><code>永远不要有空的catch语句。替代方案：向方法的调用者抛出异常、或者抽象级别抛出新异常。</code></p>
<p><code>避免在一条语句中给多个变量赋相同的值</code></p>
<p><code>不要将赋值运算符用在与相等运算符混淆的地方</code></p>
<p><code>重复代码，复制-粘贴</code></p>
<p><code>长方法，将所有逻辑处理放在一个方法里面，每个方法都应有其自己的意图</code></p>
<p><code>大类，妄想将所有模块放在一个类中实现。</code></p>
<p><code>小类，一个类所承担的责任太少，应该将其消除，类的维护需要额外的开销</code></p>

    </div>
</article>
        </main>
        <aside class="aside">
            <div class="close"></div>
            <section class="aside-section">
                
    <h1>Categories</h1>

    

            </section>
            <section class="aside-section">
                
    <h1>Archives</h1>

    <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/blog/archives/2020/">2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/blog/archives/2019/">2019</a></li></ul>


            </section>
            <section class="aside-section tag">
                
    <h1>Tags</h1>

    

            </section>
        </aside>
    </div>
</body>

</html>